From faf3ef710d6d45c679e810ae4f82bed262f4bd08 Mon Sep 17 00:00:00 2001 From: "sos22@labyrinth.cl.cam.ac.uk" Date: Tue, 8 Jul 2003 15:21:05 +0000 Subject: [PATCH] bitkeeper revision 1.308 (3f0ae161layZNlO8Hy90LYzFcZ9fkQ) Final bit of merge. --- .../arch/xeno/drivers/dom0/dom0_core.c | 112 +----------------- 1 file changed, 3 insertions(+), 109 deletions(-) diff --git a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c index 2d09f702be..496a8ce279 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c @@ -45,8 +45,9 @@ struct proc_dir_entry *xeno_base; static struct proc_dir_entry *dom0_cmd_intf; static struct proc_dir_entry *dom_list_intf; -int direct_unmap(unsigned long, unsigned long); int direct_unmap(struct mm_struct *, unsigned long, unsigned long); +unsigned long direct_mmap(unsigned long phys_addr, unsigned long size, + pgprot_t prot, int tot_pages); static ssize_t dom_usage_read(struct file * file, char * buff, size_t size, loff_t * off) { @@ -145,113 +146,6 @@ static void create_proc_dom_entries(int dom) } } -static ssize_t dom_mem_write(struct file * file, const char * buff, - size_t size , loff_t * off) -{ - dom_mem_t mem_data; - - printk("dom_mem_write called: Shouldn't happen.\n"); - - copy_from_user(&mem_data, (dom_mem_t *)buff, sizeof(dom_mem_t)); - - if ( direct_unmap(mem_data.vaddr, - mem_data.tot_pages << PAGE_SHIFT) == 0 ) { - return sizeof(sizeof(dom_mem_t)); - } else { - return -1; - } -} - -static ssize_t dom_mem_read(struct file * file, char * buff, size_t size, loff_t * off) -{ - unsigned long addr; - pgprot_t prot; - - proc_memdata_t * mem_data = (proc_memdata_t *)((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data; - - prot = PAGE_SHARED; - - /* remap the range using xen specific routines */ - - printk("Calling direct_mmap with pfn %x, tot pages %x.\n", - mem_data->pfn, mem_data->tot_pages); - - addr = direct_mmap(mem_data->pfn << PAGE_SHIFT, mem_data->tot_pages << PAGE_SHIFT, prot, MAP_DISCONT, mem_data->tot_pages); - - copy_to_user((unsigned long *)buff, &addr, sizeof(addr)); - - return sizeof(addr); -} - -struct file_operations dom_mem_ops = { - read: dom_mem_read, - write: dom_mem_write, -}; - -static int dom_map_mem(unsigned int dom, unsigned long pfn, int tot_pages) -{ - int ret = -ENOENT; - struct proc_dir_entry * pd = xeno_base->subdir; - struct proc_dir_entry * file; - proc_memdata_t * memdata; - - while(pd != NULL){ - - if((pd->mode & S_IFDIR) && ((dom_procdata_t *)pd->data)->domain == dom){ - - /* check if there is already an entry for mem and if so - * remove it. - */ - /* XXX does this not leak the memdata? */ - remove_proc_entry("mem", pd); - - /* create new entry with parameters describing what to do - * when it is mmaped. - */ - file = create_proc_entry("mem", 0600, pd); - if(file != NULL) - { - file->owner = THIS_MODULE; - file->nlink = 1; - file->proc_fops = &dom_mem_ops; - - memdata = (proc_memdata_t *)kmalloc(sizeof(proc_memdata_t), GFP_KERNEL); - memdata->pfn = pfn; - memdata->tot_pages = tot_pages; - file->data = memdata; - - ret = 0; - break; - } - - ret = -EAGAIN; - break; - } - pd = pd->next; - } - - return ret; -} - -/* function used to retrieve data associated with new domain */ -static ssize_t dom_data_read(struct file * file, char * buff, size_t size, loff_t * off) -{ - dom0_newdomain_t * dom_data = (dom0_newdomain_t *) - ((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data; - - copy_to_user((dom0_newdomain_t *)buff, dom_data, sizeof(dom0_newdomain_t)); - - remove_proc_entry("new_dom_data", xeno_base); - - kfree(dom_data); - - return sizeof(dom0_newdomain_t); -} - -struct file_operations newdom_data_fops = { - read: dom_data_read, -}; - static int dom0_cmd_write(struct file *file, const char *buffer, size_t size, loff_t *off) { @@ -447,7 +341,7 @@ static int handle_dom0_cmd_unmapdommem(unsigned long data) return -EFAULT; return direct_unmap(current->mm, argbuf.vaddr, - argbuf.tot_pages << PAGE_SIZE); + argbuf.tot_pages << PAGE_SHIFT); } static int dom0_cmd_ioctl(struct inode *inode, struct file *file, -- 2.30.2